<?php
class ModeloTipoContenidoKakoon
{
    public static final function getXHTML (ContenidoKakoon $contenido)
    {
        $retorno = "";

        $tipo     = $contenido->getPropiedad ("tipo");
        $cargador = self::recuperaTipo ($tipo);

        if ($cargador instanceof TipoContenidoKakoon)
        {
            $retorno = $cargador->getXHTML ($contenido);           
        }
        
        return $retorno;
    }

    public static final function getListado()
    {
        $retorno = array();

        $directorios = Soporte::getDirectorios($GLOBALS["TIPOS_HOME"]);

        foreach ($directorios as $directorio)
        {
            $ruta     = ($GLOBALS["TIPOS_HOME"] . $directorio . DS);
            $clase    = ucwords($directorio)."_".ConstantesKakoon::TERMINACION_MODELO_TIPO;
            $cargador = ($ruta . "clases". DS . $clase .".php");
            $existe   = file_exists($cargador);

            if ($existe)
            {
                include_once ($cargador);

                $instancia = new $clase();
                $esTipo    = ($instancia instanceof TipoContenidoKakoon);

                if ($esTipo)
                {
                    array_push($retorno, $directorio);
                }
            }
        }

        return $retorno;
    }

    public static final function recuperaTipo ($tipo)
    {
        $retorno = null;

        $ruta     = ($GLOBALS["TIPOS_HOME"] . $tipo . DS);
        $clase    = ucwords($tipo)."_".ConstantesKakoon::TERMINACION_MODELO_TIPO;
        $cargador = ($ruta . "clases". DS . $clase .".php");
        $existe   = file_exists($cargador);

        if ($existe)
        {
            include_once ($cargador);

            $instancia = new $clase();
            $esTipo    = ($instancia instanceof TipoContenidoKakoon);

            if ($esTipo)
            {
                $retorno = $instancia;
            }
        }

        return $retorno;
    }
}
?>